Serial Class

Serial controls are used to perform serial communications.

Events

DataAvailable

Error

LineStateChanged


Properties

Baud

DataTerminalReady

Parity

Bits

DTR

RequestToSend

BytesAvailable

Index

RingIndicator

BytesLeftToSend

LastErrorCode

SerialPort

ClearToSend

Left

Stop

CTS

MacInDriverRefNumber

Top

DataCarrierDetect

MacOutDriverRefNum

Win32DriverHandle

DataSetReady

Name

XON


Methods

ClearBreak

LookAhead

Reset

Close

Open

SetBreak

Flush

Poll

Write

LeaveDTROnClose

Read

XmitWait

LineChangeNotification

ReadAll

 

More information available in parent classes: Object

The Serial control can be instantiated via code since it is not a subclass of Control. This allows you to easily write code that does communications without adding the control to a window.


Baud Rates

To set the Baud Rate, assign the desired class constant to the Baud property. To get the Baud Rate, compare the value of the Baud property to the constants in this table.

Baud RateValueConstant
300 0 Baud300
600 1 Baud600
1200 2 Baud1200
1800 3 Baud1800
2400 4 Baud2400
3600 5 Baud3600
4800 6 Baud4800
7200 7 Baud7200
9600 8 Baud9600
14400 9 Baud14400
19200 10 Baud19200
28800 11 Baud28800
38400 12 Baud38400
57600 13 Baud57600
115200 14 Baud115200
230400 15 Baud230400

Setting nonstandard baud rates is supported only on Windows. On Mac OS X, the baud rates are filtered out by the kernel and hence do not get to the serial driver. On Linux, some non-standard baud rates are possible to achieve by using the Setserial system call and setting your baud rate to a special value.


Notes

The Serial control can be used to communicate via multiple serial ports at once. You can use the properties of the System object to determine the number of serial ports on the computer and get an array of those ports. You should create an interface to allow the end user to choose the desired port, since serial ports are different on different machines and platforms.

When data is received by a serial port connection, the DataAvailable event handler will automatically execute. In this event handler, you would then use the Read or ReadAll functions to access the data in the serial port buffer. These functions remove the data from the serial port buffer as they return the data. If you need to read the data from the serial port buffer without removing it from the buffer, use the LookAhead property. This buffer will use as much memory as it needs from the memory available so there is no need for it to be resized.

Because the Write method is handled asynchronously, you may need to use the XmitWait method to force REALbasic to wait until REALbasic has finished sending the data out the serial port.

On Mac OS X and Linux, REALbasic gets exclusive rights to the serial port when opening it. This means that another application cannot also open the serial port after REALbasic has opened it, unless the user is running as root.

The Serial control implements the Readable and Writable class interfaces. If you implement either or both of these interfaces, you must provide methods that those interfaces specify.

For more information about class interfaces and how to implement them, see the section "Class Interfaces" in the User's Guide.


Example

The following code opens the serial port. It assumes that the Serial1 control has been added to a window.

If Serial1.Open then
  MsgBox "The serial port is open."
Else
  MsgBox "The serial port could not be opened."
End if

When the serial device sends data back to the Serial control that is open, the Serial control's DataAvailable event fires. The data is transferred into a memory buffer. In the DataAvailable event handler, you use the Read or ReadAll methods to get some or all of the data from the buffer. Choose the Read method when you want to get a specific number of bytes (characters) from the buffer. Choose the ReadAll method to get all of the data in the buffer. In both cases, the data returned from the buffer is removed from the buffer to make room for more incoming data. If you need to examine the data in the buffer without removing it from the buffer, you can call the LookAhead method.

This example appends any incoming data to an EditField:

Sub DataAvailable()
 EditField1.Text=EditField1.Text+ Me.ReadAll()

Both the Read and ReadAll methods of the Serial class take an optional parameter that enables you to specify the encoding. Use the Encodings object to get the desired encoding and pass it as a parameter. For example, the code above has been modified to specify that the incoming text uses the ANSI encoding, a standard on Windows:

Sub DataAvailable()
 EditField1.Text=EditField1.Text+Me.ReadAll(Encodings.WindowsANSI)

You can send data to the serial device at any time as long as you have opened the serial port with the Serial control's Open method. You send data using the Serial control's Write method. The data you wish to send must be a string, as the Write method accepts only a string as a parameter.

If Serial1.Open then
 Serial1.Write(EditField1.Text)
Else
  MsgBox "The serial port could not be opened."
End if

The Write method is performed asynchronously. This means that the next line of code following the Write method can already be executing before all the data has actually been sent to the serial device. If you need your code to wait for all data to be sent to the serial device before continuing, call the Serial control's XmitWait method immediately following a call to the Write method.

The following code directs the Serial control to communicate using Serial port zero (Modem port).

Serial.SerialPort= System.SerialPort(0)

See Also

SerialPort class; System object; Readable, Writeable class interfaces.